package com.reflect.study;

import com.reflect.study.entity.User;

public class Test {
    public static void main(String[] args) throws Exception {
        // 动态调用获取class的名称，方法，属性

        // 方式一获取class
        Class userClass1 = User.class;
        // 默认调用的是无参构造方法
        User userEntity = (User) userClass1.newInstance();
        System.out.println(userEntity);

        // 方式二获取class
        Class userClass2 = Class.forName("com.reflect.study.entity.User");
        // 结果为true
        System.out.println(userClass1 == userClass2);

        // 方式三获取class
        User newUser = new User();
        Class userClass3 = newUser.getClass();
        // 结果为true
        System.out.println(userClass1 == userClass3);

        // 反射就是通过字节码文件拿到我们定义的class对象，整个jvm中字节码对象只有一个，所以都是相等的

        User user3 = new User();
        // 结果为false
        System.out.println(user3 == userEntity);
    }
}
